Computer operating system performance is often characterized by the maximum rate of input/output (I/O) operations (also called “I/O performance”) that the operating system can sustain over a given time interval. As a result, operating systems employ a variety of well-known mechanisms to boost I/O performance.
Operating systems are traditionally written using unmanaged languages (such as assembly language, C, C++) which provides the system programmer with very fine control of how memory is manipulated. The use of unchecked pointers may be used to minimize the operating system's overhead and allow increased throughput or reduced latency. The downside to the use of these unchecked pointers is that they are difficult to create and reason about, leading to unreliable software and to security vulnerabilities.
Writing software in a managed programming language provides substantial correctness benefits and development time efficiencies. These managed languages prevent programmers from creating many kinds of software defects, which leads to improved software quality and reduced development time. Operating system correctness is a critical ingredient for delivering a reliable and secure compute experience. Therefore, using managed languages to create operating systems is a compelling proposition as operating system reliability can improve and development costs can be reduced.
To achieve these benefits, managed programming languages insert an abstraction layer between the source code drafted by the programmer and the raw machine resources of a physical computer system. This abstraction layer generally serves to constrain what programmers are allowed to write, and in so doing eliminate whole categories of potential defects. Unfortunately, this abstraction layer introduces overhead which can hurt the performance of the software being created. As a result, a common assumption is that managed languages trade correctness defects for performance defects. Hence, software written in managed languages is often considered inherently slower than software written in unmanaged languages.
The particular problem that affects managed code operating systems is the inherent need to copy data between layers as the data travels through the system. This is induced by the fact that distinct components of the system exist in different isolation contexts and there is no clear mechanism to break out of these isolation contexts.